/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GlobalObservingSystem.Mundo.AlarmasYSucesos;

import GlobalObservingSystem.Interfaces.IMotorSucesos;
import GlobalObservingSystem.Mundo.Coordenada;
import GlobalObservingSystem.Mundo.BaseDatos.EventoBD;
import java.util.Collection;
import java.util.Date;

/**
 * Esta clase modela el motor de sucesos, el cual esta encargado de manejar los eventos, alarmas y alertas.
 * @author Luis Cabarique
 */
public class MotorSucesos implements IMotorSucesos {

    //============================Atributos de la clase=========================

    /**
     * Arreglo de zonas del motor de sucesos.
     */
    private Coordenada[] zonas;

    /**
     * Arreglo de eventos del motor de sucesos.
     */
    private EventoBD[] eventos;

    //=============================Metodos de la clase==========================

    /**
     * Guarda la subscripción del usuario.
     * pre: Parametros no nulos.
     * post: El evento se almacena en la base de datos.
     * @param tipo tipo
     * @param nivel nivel
     * @param latitud1 latitud vertice 1
     * @param longitud1 longitud vertice 1
     * @param latitud2 latitud vertice 2
     * @param longitud2 longitud vertice 2
     */
    public void guardarSubscripcion(int tipo, int nivel, Coordenada latitud1, Coordenada longitud1, Coordenada latitud2, Coordenada longitud2) {
    }

    /**
     * Trae la información del evento al que esta subscrito el usuario.
     * pre: iD del usuario no nulo.
     * post:Si el id existe, devuelve la información del evento del usuario.
     * @param idUsuario Id del usuario
     * @return retorna el evento del usuario.
     */
    public EventoBD traerSuscripcion(int idUsuario) {
        return null;
    }

    /**
     * Identifica si las mediciones recibidas concuerdan con los parámetros de uno o más usuarios.
     * pre: Evalúa solo los datos recibidos desde la última vez que se invoco el método.
     * post: Envían mensajes de aviso a los usuarios que tenían subscipciones que concuerdan con los datos que fueron recibidos.
     */
    public void evaluarEventos() {
    }

    /**
     * Este metodo consulta los eventos historicos en un rango de fechas y dos coordenadas.
     * @param fechaInicial rango inicial.
     * @param fechaFinal rango final.
     * @param latitud1 latitud del vertice 1.
     * @param longitud1 longitud del vertice 1.
     * @param latitud2 latitud del vertice 2
     * @param longitud2 longitud del vertice 2
     * @return retorna una coleción de eventos dentro del rango de busqueda.
     */
    public Collection<EventoBD> consultarEventos(Date fechaInicial, Date fechaFinal, Coordenada latitud1, Coordenada longitud1, Coordenada latitud2, Coordenada longitud2) {
        return null;
    }

    /**
     *Este metodo consulta los eventos historicos en un rango de fechas, un punto y un perímetro.
     * @param fechaInicial rango inicial.
     * @param fechaFinal rango final.
     * @param latitud1 latitud del vertice.
     * @param longitud1 longitud del vertice.
     * @param perimetro perimetro del punto.
     * @return retorna una coleción de eventos dentro del rango de busqueda.
     */
    public Collection<EventoBD> consultarEventos(Date fechaInicial, Date fechaFinal, Coordenada latitud1, Coordenada longitud1, short perimetro) {
        return null;
    }

    /**
     * Este metodo consulta las alarmas historicas en un rango de fechas y dos coordenadas.
     * @param fechaInicial rango inicial.
     * @param fechaFinal rango final.
     * @param latitud1 latitud del vertice 1.
     * @param longitud1 longitud del vertice 1.
     * @param latitud2 latitud del vertice 2
     * @param longitud2 longitud del vertice 2
     * @return retorna una coleción de eventos dentro del rango de busqueda.
     */
    public Collection<EventoBD> consultarAlarmas(Date fechaInicial, Date fechaFinal, EventoBD latitud1, EventoBD longitud1, EventoBD latitud2, EventoBD longitud2) {
        return null;
    }

    /**
     *Este metodo consulta las alarmas historicas en un rango de fechas, un punto y un perímetro.
     * @param fechaInicial rango inicial.
     * @param fechaFinal rango final.
     * @param latitud1 latitud del vertice.
     * @param longitud1 longitud del vertice.
     * @param perimetro perimetro del punto.
     * @return retorna una coleción de eventos dentro del rango de busqueda.
     */
    public Collection<EventoBD> consultarAlarmas(Date fechaInicial, Date fechaFinal, EventoBD latitud1, EventoBD longitud1, short perimetro) {
        return null;
    }

    /**
     * Este metodo consulta las alartas historicas en un rango de fechas y dos coordenadas.
     * @param fechaInicial rango inicial.
     * @param fechaFinal rango final.
     * @param latitud1 latitud del vertice 1.
     * @param longitud1 longitud del vertice 1.
     * @param latitud2 latitud del vertice 2
     * @param longitud2 longitud del vertice 2
     * @return retorna una coleción de eventos dentro del rango de busqueda.
     */
    public Collection<EventoBD> consultarAlertas(Date fechaInicial, Date fechaFinal, EventoBD latitud1, EventoBD longitud1, EventoBD latitud2, EventoBD longitud2) {
        return null;
    }

    /**
     *Este metodo consulta las alarmas historicas en un rango de fechas, un punto y un perímetro.
     * @param fechaInicial rango inicial.
     * @param fechaFinal rango final.
     * @param latitud1 latitud del vertice.
     * @param longitud1 longitud del vertice.
     * @param perimetro perimetro del punto.
     * @return retorna una coleción de eventos dentro del rango de busqueda.
     */
    public Collection<EventoBD> consultarAlertas(Date fechaInicial, Date fechaFinal, EventoBD latitud1, EventoBD longitud1, short perimetro) {
        return null;
    }
}
